package com.cn.dim.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.cn.dim.pojo.Chktask;
import com.cn.dim.pojo.Pages;
import com.cn.dim.service.ChktaskService;
import com.github.pagehelper.Page;


@Controller
@RequestMapping("/chktask")
public class ChktaskController {

	@Resource
	private ChktaskService chktaskService;
	@RequestMapping(value ="/queryChktask",method = RequestMethod.GET)
	@ResponseBody
	//Pages是自己定义的页面实体类，属于固定写法；第二个参数是web页面中的“日期查询条件”，第三个参数是web页面中的“时间段范围类型查询条件”
	public Map<String,Object> queryChktask(HttpServletRequest request,Chktask ct,Pages pages,String tdate,String timerange){
		Map<String,Object> param=new HashMap<>();//定义查询参数
		Map<String,Object> reMap=new HashMap<>();//定义返回值，其中有一项必须是集合，先按照下面的写法
		//参数ct是列表页中以查询条件数据临时组成的过渡chktask对象
		param.put("pageIndex", pages.getPage());
		param.put("pageSize", pages.getRows());
		param.put("chktask", ct);//只保存一个检查点id的参数（外键chkpointid）
		
		//处理第二个参数“日期查询条件”，处理为所选择日期的00:00:00到下一日期的00:00:00
		param.put("tdate", tdate);//第二个查询参数
		if(tdate!=null)
		{
			String stime=tdate+" 00:00:00";
			String etime=tdate+" 23:59:59";
			param.put("stime", stime);//开始时间
			param.put("etime", etime);//截止时间
		}
		
		//处理第三个参数“时间段范围类型查询条件”，处理为当前日期的23:59:59，往前推1天，1周，1月，1年的那天的00:00:00
		param.put("timerange", timerange);//第三个查询参数
		if(timerange!=null)
		{
			if(timerange.equals("0"))
			{
				param.put("timerange", null);
			}
			else
			{
				String[] startTimeAndEndTime=getStimeAndEtime(timerange); 
				param.put("stimerange", startTimeAndEndTime[0]);//周期开始时间
				param.put("etimerange", startTimeAndEndTime[1]);//周期截止时间
			}
		}
		
		try {
			Page<Map<String,Object>> rList = (Page)chktaskService.queryChktask(param);
			
			//下面代码通过循环对每一行的结果集补充“本次巡查数据”这个显示字段
			for(Map m:rList){
				
				String datarecord=(String)m.get("datarecord");//取得数据库中的原始数据（json格式）
				String chkdetail=getChkdetail(datarecord);
				m.put("chkdetail", chkdetail);//在每行记录中补充1个用于显示的键值对
			}
			
			System.out.println(rList);
			reMap.put("rows", rList);
			reMap.put("total", rList.getTotal());
			reMap.put("status", "success");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			reMap.put("status", "error");
		}
		return reMap;
	}
	//解析json格式的datarecord字段用于页面显示（辅助方法）
	private String getChkdetail(String datarecord)
	{
		String chkdetail="";
		try {
		    JSONArray array = JSONArray.fromObject(datarecord);
		    for (int i = 0; i < array.size(); i++) {
		        JSONObject jsonObject = array.getJSONObject(i);
		        String in = jsonObject.getString("itemname");//通过键值名获取字符串
		        String iv = jsonObject.getString("itemvalue");//通过键值名获取字符串
		        String iu = jsonObject.getString("itemunit");//通过键值名获取字符串
				chkdetail+=in+":"+iv+""+iu+"&nbsp;&nbsp;&nbsp;";
		    }
		}catch (Exception e){
			e.printStackTrace();
		}
		return chkdetail;
	}
	
	//用于巡查点下拉
	@RequestMapping(value ="/queryChkpoint",method = RequestMethod.GET)
	@ResponseBody
	public List<Map<String,Object>> queryChkpoint(HttpServletRequest request){
		Map<String,Object> param=new HashMap<>();//查询不需要参数，这里作为一个空参数传过去；
		//Map<String,Object> reMap=new HashMap<>();
		List<Map<String,Object>> list = new ArrayList<>();
		try {
			list =chktaskService.queryChkpoint(param);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return list;
	}

	@RequestMapping(value ="/insertChktask",method = RequestMethod.POST)
	@ResponseBody
	public Map<String,Object> insertChktask(Chktask ct,String photourls)   
	{
		Map<String,Object> reMap=new HashMap<>();//返回值map
		String chktaskid=com.cn.dim.utils.StringUtil.makeUUID();
		ct.setId(chktaskid);
		ct.setIsdel("0");
		
		//下面的代码构造文件表对象map集合
		List<Map<String,Object>> ct_photourls=new ArrayList<Map<String,Object>>();
		//根据photourls字符串集合参数循环构造map格式的Filepath对象集合
		Map<String,Object> ct_photourl=new HashMap<>();
		//这里补充处理代码
		
		try 
		{
			//注意：如果不正常的话，还需要对该检查点的责任人进行微信消息的推送；
			int flag = chktaskService.insertChktask(ct,ct_photourls);
			if(flag>0)
			{
				reMap.put("message", "插入成功");
				reMap.put("status", "success");
			}
			else
			{
				reMap.put("status", "error");
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			reMap.put("status", "error");
		}
		return reMap;
	}
	
	@RequestMapping(value ="/updateChktask",method = RequestMethod.POST)
	@ResponseBody
	public Map<String,Object> updateChktask(Chktask ct,String chktaskid)  
	{
		Map<String,Object> reMap=new HashMap<>();//返回值map
		ct.setId(chktaskid);//实体对象传来的并不含有id的值，这里要使用页面传过来chktaskid值进行填充
		try 
		{
			int flag = chktaskService.updateChktask(ct);
			if(flag>0)
			{
				reMap.put("message", "修改成功");
				reMap.put("status", "success");
			}
			else
			{
				reMap.put("status", "error");
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			reMap.put("status", "error");
		}
		return reMap;
	}

	@RequestMapping(value ="/delChktask",method = RequestMethod.POST)
	@ResponseBody
	public Map<String,Object> delChktask(HttpServletRequest request,String chktaskid)   
	{
		Map<String,Object> reMap=new HashMap<>();//返回值map
        Map<String,Object> m=new HashMap<>();//构造service接口中delChktask方法的参数
        m.put("chktaskid", chktaskid);
		try 
		{
			int flag = chktaskService.delChktask(m);
			if(flag>0)
			{
				reMap.put("message", "删除成功");
				reMap.put("status", "success");
			}
			else
			{
				reMap.put("status", "error");
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			reMap.put("status", "error");
		}
		return reMap;
	}
	
	@RequestMapping(value ="/queryChktaskById",method = RequestMethod.GET)
	@ResponseBody
	public Map<String,Object> queryChktaskById(HttpServletRequest request,String chktaskid){
		Map<String,Object> m=new HashMap<>();
		Map<String,Object> reMap=new HashMap<>();
		m.put("chktaskid", chktaskid);
		try {
			Chktask chktask =chktaskService.queryChktaskById(m);
			reMap.put("data", chktask);
			reMap.put("status", "success");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			reMap.put("status", "error");
		}
		return reMap;
	}

	/**
	 * 作用：取得当前时间“当天1、一周7、一月30、一年365、所有0（默认）”的时间串组
	 * 参数：range
	 * 更新时间：2018-12-13
	 */
	public String[] getStimeAndEtime(String timerange) 
	{
	  	String[] startTimeAndEndTime=new String[2];
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar c=Calendar.getInstance();//获取当前时间
		//1：当前的时间作为"endTime"
	   	Date endTime = new Date();
	   	startTimeAndEndTime[1]=sdf.format(endTime)+" 23:59:59";
	   	//2：根据参数获取开始时间"startTime"
	   	if(timerange.equals("1"))//一天
	   	{
		   	startTimeAndEndTime[0]=sdf.format(endTime)+" 00:00:00";
	   	}
	   	if(timerange.equals("7"))//一周
	   	{
	        c.setTime(endTime);
	        c.add(Calendar.DATE,-7);
	        Date startTime=c.getTime();
	        startTimeAndEndTime[0]=sdf.format(startTime)+" 00:00:00";
	   	}
	   	if(timerange.equals("30"))//一月
	   	{
	        c.setTime(endTime);
	        c.add(Calendar.MONTH,-1);
	        Date startTime=c.getTime();
	        startTimeAndEndTime[0]=sdf.format(startTime)+" 00:00:00";
	   	}
	   	if(timerange.equals("365"))//一年
	   	{
	        c.setTime(endTime);
	        c.add(Calendar.YEAR,-1);
	        Date startTime=c.getTime();
	        startTimeAndEndTime[0]=sdf.format(startTime)+" 00:00:00";
	   	}
		return startTimeAndEndTime;
	}

}
